অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) একটি অত্যন্ত শক্তিশালী লাইব্রেরি যা Java প্রোগ্রামিং ভাষায় উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এটি Java স্ট্যান্ডার্ড কালেকশন API এর বাইরের কিছু অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ফাংশন প্রদান করে যা ডেটা ম্যানিপুলেশন এবং সংগ্রহ করার প্রক্রিয়াকে আরও সহজ করে তোলে। এই লাইব্রেরির মধ্যে কিছু গুরুত্বপূর্ণ বেসিক ক্লাস রয়েছে, যা ডেভেলপারদের বিভিন্ন পরিস্থিতিতে কার্যকরী ডেটা স্ট্রাকচার ব্যবহার করতে সহায়তা করে।
এখানে আমরা Commons Collections এর বেসিক ক্লাস সম্পর্কে আলোচনা করব, যেমন Bag
, BidiMap
, MultiMap
, Deque
, এবং আরো।
Bag একটি ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট আইটেমের উপস্থিতি গণনা করে, অর্থাৎ একটি আইটেম কতবার উপস্থিত (frequency) আছে তা ট্র্যাক করে। এটি মূলত Map
এর মতো কাজ করে, তবে এখানে মান (value) হিসেবে গণনা (count) থাকে।
Bag সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে একটি আইটেমের উপস্থিতি বারবার আসতে পারে এবং আমাদের সেই উপস্থিতি ট্র্যাক করতে হবে।
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
public class BagExample {
public static void main(String[] args) {
Bag<String> bag = new HashBag<>();
// Add items to the bag
bag.add("apple");
bag.add("banana");
bag.add("apple");
// Get the count of an item
System.out.println("Count of apple: " + bag.getCount("apple")); // Output: 2
System.out.println("Count of banana: " + bag.getCount("banana")); // Output: 1
}
}
এখানে:
HashBag
একটি Bag
ইমপ্লিমেন্টেশন যা আইটেমের সংখ্যা ট্র্যাক করে।getCount("apple")
দিয়ে apple
এর উপস্থিতির সংখ্যা পাওয়া যাচ্ছে।BidiMap হল একটি বিশেষ ধরনের ম্যাপ, যা দুটি দিক থেকে কাজ করে। এটি সাধারণ Map
এর মতো কাজ করে, তবে এতে আপনি একটি কী থেকে মান (value) এবং মান থেকে কী (key) উভয় দিক থেকে অ্যাক্সেস করতে পারেন। সাধারণত Map
শুধুমাত্র কী থেকে মান বের করতে সক্ষম, কিন্তু BidiMap
উভয় দিক থেকে অ্যাক্সেস করার সুযোগ দেয়।
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.map.HashBidiMap;
public class BidiMapExample {
public static void main(String[] args) {
BidiMap<String, String> bidiMap = new HashBidiMap<>();
// Put key-value pairs into the BidiMap
bidiMap.put("one", "1");
bidiMap.put("two", "2");
// Get value by key
System.out.println(bidiMap.get("one")); // Output: 1
// Get key by value
System.out.println(bidiMap.getKey("2")); // Output: two
}
}
এখানে:
HashBidiMap
হলো একটি ইমপ্লিমেন্টেশন যা কী এবং মান উভয় দিক থেকে অ্যাক্সেস করার সুবিধা দেয়।getKey("2")
এর মাধ্যমে আপনি মান থেকে কী বের করতে পারেন।MultiMap হল একটি ম্যাপ যা একটি কী এর সাথে একাধিক মান সংরক্ষণ করতে সক্ষম। সাধারণ Map
একটি কী এর সাথে একমাত্র মান রাখে, কিন্তু MultiMap
একই কী এর সাথে একাধিক মান সংরক্ষণ করতে পারে। এটি সাধারণত সেই পরিস্থিতিতে ব্যবহৃত হয় যেখানে একটি কী এর জন্য একাধিক মান থাকতে পারে, যেমন একটি ইউজার এর সাথে একাধিক অ্যাড্রেস থাকতে পারে।
import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.map.MultiValueMap;
import org.apache.commons.collections4.map.HashedMap;
public class MultiMapExample {
public static void main(String[] args) {
MultiMap<String, String> multiMap = new MultiValueMap<>();
// Put multiple values under the same key
multiMap.put("fruit", "apple");
multiMap.put("fruit", "banana");
multiMap.put("vegetable", "carrot");
// Get all values for a key
System.out.println(multiMap.get("fruit")); // Output: [apple, banana]
}
}
এখানে:
MultiValueMap
একটি ইমপ্লিমেন্টেশন যা একই কী এর সাথে একাধিক মান যোগ করতে সাহায্য করে।multiMap.get("fruit")
দ্বারা fruit
কী এর সাথে সম্পর্কিত সমস্ত মান পাওয়া যাবে।Deque (Double Ended Queue) একটি কিউ (Queue) যা আইটেম ইনসার্ট এবং রিমুভ করার জন্য উভয় প্রান্তে কাজ করে। এটি Queue
এর চেয়েও শক্তিশালী, কারণ আপনি কিউ এর উভয় প্রান্ত থেকে আইটেম বের করতে এবং যুক্ত করতে পারবেন।
import org.apache.commons.collections4.Queue;
import org.apache.commons.collections4.queue.CircularFifoQueue;
public class DequeExample {
public static void main(String[] args) {
Deque<String> deque = new CircularFifoQueue<>(5);
// Add items to the deque
deque.add("apple");
deque.add("banana");
deque.add("cherry");
// Print deque
System.out.println(deque); // Output: [apple, banana, cherry]
// Remove items from the front
deque.removeFirst();
System.out.println(deque); // Output: [banana, cherry]
}
}
এখানে:
CircularFifoQueue
একটি ডাবল-এন্ডেড কিউ ইমপ্লিমেন্টেশন যা FIFO (First-In-First-Out) নীতি অনুসরণ করে।removeFirst()
দিয়ে কিউয়ের প্রথম আইটেম সরানো হয়েছে।আইটেমগুলির উপর কাজ করতে Iterator একটি গুরুত্বপূর্ণ ফাংশনালিটি। কমন্স কালেকশনস লাইব্রেরি Iterator Utilities সরবরাহ করে যা ইটারেটর ব্যবহার করে দ্রুত ফিল্টারিং এবং কার্যকরী ম্যানিপুলেশন করতে সাহায্য করে।
forEach
ব্যবহারimport org.apache.commons.collections4.IteratorUtils;
import java.util.List;
import java.util.Arrays;
public class IteratorExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// Using forEach from IteratorUtils
IteratorUtils.forEach(list.iterator(), System.out::println);
}
}
এখানে:
IteratorUtils.forEach
ব্যবহার করে তালিকার সকল আইটেমের উপর অ্যাকশন প্রয়োগ করা হয়েছে (এখানে প্রিন্ট করা হয়েছে)।অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Java ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা বিভিন্ন উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে Bag, BidiMap, MultiMap, Deque, এবং Iterator Utilities প্রভৃতি কার্যকরী ক্লাস অন্তর্ভুক্ত রয়েছে, যা Java স্ট্যান্ডার্ড কালেকশন API এর বাইরে অতিরিক্ত কার্যক্ষমতা সরবরাহ করে। এই ক্লাসগুলির মাধ্যমে আপনি আরও সহজভাবে ডেটা ম্যানিপুলেশন এবং কালেকশন ম্যানেজমেন্ট করতে পারেন, যা প্রোজেক্টের কার্যক্ষমতা এবং উন্নয়ন প্রক্রিয়াকে দ্রুত এবং সুশৃঙ্খল করে তোলে।
Apache Commons Collections লাইব্রেরির মধ্যে CollectionUtils একটি গুরুত্বপূর্ণ ইউটিলিটি ক্লাস যা বিভিন্ন ধরনের Collection (যেমন: List, Set, Map ইত্যাদি) এবং ডেটা স্ট্রাকচার সম্পর্কিত কার্যাবলী সরবরাহ করে। CollectionUtils Java Collections Framework এর উপর অতিরিক্ত সুবিধা এবং ফাংশনালিটি যোগ করে, যা কোলেকশনগুলির ম্যানিপুলেশন আরও সহজ এবং কার্যকরী করে তোলে।
CollectionUtils বিভিন্ন সাধারণ এবং জটিল কাজ যেমন, কোলেকশন ম্যানিপুলেশন, ফিল্টারিং, মার্জিং, চেকিং, আইটেম অপসারণ, শূন্য চেকিং ইত্যাদি সহজেই সম্পাদন করতে সহায়তা করে। এটি Java Collections Framework এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ এবং List, Set, Map ইত্যাদি কোলেকশন টাইপে কাজ করতে পারে।
CollectionUtils-এ অনেক ধরনের ইউটিলিটি মেথড রয়েছে, যার মাধ্যমে আপনি সহজে কোলেকশনগুলির সাথে কাজ করতে পারেন। কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য নিচে আলোচনা করা হলো:
CollectionUtils কোলেকশন সম্পর্কিত বিভিন্ন চেকিং ফাংশন প্রদান করে, যেমন কোলেকশনটি শূন্য (null) বা খালি কিনা পরীক্ষা করা, অথবা কোলেকশনে কোনও উপাদান রয়েছে কিনা।
isEmpty()
: কোলেকশনটি শূন্য কিনা তা চেক করে।isNotEmpty()
: কোলেকশনটি খালি নয়, তা চেক করে।size()
: কোলেকশনের আকার (size) প্রদান করে।import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
if (CollectionUtils.isEmpty(list)) {
System.out.println("List is empty.");
} else {
System.out.println("List is not empty.");
}
}
}
এখানে:
CollectionUtils.isEmpty()
চেক করে যে list খালি নয়।CollectionUtils কোলেকশনের উপাদান যোগ করা, মুছে ফেলা এবং কোলেকশনগুলির মধ্যে অপারেশন পরিচালনা করতে সাহায্য করে।
addAll()
: একটি কোলেকশনে অন্যান্য কোলেকশনের উপাদান যোগ করতে ব্যবহৃত হয়।removeAll()
: একাধিক উপাদান সরাতে ব্যবহৃত হয়।import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
List<String> list2 = new ArrayList<>();
list2.add("orange");
list2.add("grape");
// Add all elements from list2 to list1
CollectionUtils.addAll(list1, list2.toArray());
// Remove all elements of list2 from list1
CollectionUtils.removeAll(list1, list2);
System.out.println("list1 after manipulation: " + list1);
}
}
এখানে:
CollectionUtils.addAll()
ব্যবহৃত হয়েছে একটি কোলেকশন থেকে অন্য কোলেকশনে সব উপাদান যোগ করার জন্য।CollectionUtils.removeAll()
ব্যবহৃত হয়েছে একটি কোলেকশন থেকে অন্য কোলেকশনের সব উপাদান মুছে ফেলার জন্য।CollectionUtils ফিল্টারিং অপারেশন পরিচালনা করতে সহায়তা করে, যেমন নির্দিষ্ট শর্ত পূরণকারী উপাদানগুলি কোলেকশন থেকে বের করা।
select()
: শর্তসাপেক্ষে উপাদান নির্বাচন করা।reject()
: শর্তসাপেক্ষে উপাদান বাতিল করা।import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
list.add("grape");
// Select items starting with "b"
Collection<String> selected = CollectionUtils.select(list, s -> s.startsWith("b"));
System.out.println("Selected items: " + selected);
// Reject items starting with "b"
Collection<String> rejected = CollectionUtils.reject(list, s -> s.startsWith("b"));
System.out.println("Rejected items: " + rejected);
}
}
এখানে:
select()
ব্যবহার করা হয়েছে "b" দিয়ে শুরু হওয়া উপাদানগুলো নির্বাচন করতে।reject()
ব্যবহার করা হয়েছে "b" দিয়ে শুরু না হওয়া উপাদানগুলো বাতিল করতে।CollectionUtils কোলেকশনের মধ্যে মার্জিং (একত্রিত) অপারেশন সহজে করতে সহায়তা করে।
union()
: দুটি কোলেকশন একত্রিত করে একটি নতুন কোলেকশন তৈরি করে।intersection()
: দুটি কোলেকশনের সাধারণ উপাদানগুলো বের করে।import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
List<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("cherry");
// Union of two lists
Collection<String> union = CollectionUtils.union(list1, list2);
System.out.println("Union: " + union);
// Intersection of two lists
Collection<String> intersection = CollectionUtils.intersection(list1, list2);
System.out.println("Intersection: " + intersection);
}
}
এখানে:
union()
ব্যবহৃত হয়েছে দুটি কোলেকশন একত্রিত করতে।intersection()
ব্যবহৃত হয়েছে দুটি কোলেকশনের সাধারণ উপাদান খুঁজে বের করতে।CollectionUtils আরও অনেক শক্তিশালী ফাংশন প্রদান করে যা কোলেকশন অপারেশন সহজ এবং দ্রুত করতে সাহায্য করে, যেমন:
emptyCollection()
: একটি খালি কোলেকশন তৈরি করতে ব্যবহৃত হয়।addIgnoreNull()
: নাল (null) চেক করার পর একটি কোলেকশনে উপাদান যোগ করে।filter()
: একটি শর্ত অনুযায়ী কোলেকশনের উপাদান ফিল্টার করতে ব্যবহৃত হয়।আপনি যদি Maven ব্যবহার করে থাকেন, তাহলে Apache Commons Collections লাইব্রেরিটি আপনার প্রোজেক্টে যোগ করার জন্য আপনাকে pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করতে হবে:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
এটি আপনার প্রোজেক্টে Apache Commons Collections লাইব্রেরি যোগ করবে, যার মাধ্যমে আপনি CollectionUtils সহ অন্যান্য কার্যকারিতা ব্যবহার করতে পারবেন।
CollectionUtils Apache Commons Collections লাইব্রেরির একটি শক্তিশালী ক্লাস যা কোলেকশন সম্পর্কিত বিভিন্ন ইউটিলিটি ফাংশন সরবরাহ করে। এটি কোলেকশনগুলির মধ্যে সাধারণ অপারেশন যেমন যোগ, অপসারণ, ফিল্টারিং, মার্জিং এবং সাইজ চেকিং ইত্যাদি সহজ করে তোলে। Java Collections Framework এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হওয়ায় এটি আপনার প্রোজেক্টে কোলেকশন ম্যানিপুলেশন কাজকে আরও সহজ এবং দ্রুত করে তোলে।
Apache Commons Collections লাইব্রেরি Java Collections Framework (JCF)-এর উপর ভিত্তি করে আরও উন্নত এবং কার্যকরী ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। IterableMap এবং MapUtils দুটি গুরুত্বপূর্ণ উপাদান যা Map সম্পর্কিত অপারেশন এবং কাস্টম ফিচার সরবরাহ করে।
IterableMap হল Apache Commons Collections এর একটি ইন্টারফেস যা Map ইন্টারফেসের একটি এক্সটেনশন। এটি মূলত একটি Map যা Iterable ইন্টারফেসকে এক্সটেন্ড করে, যার মাধ্যমে আপনি একটি Map এর উপাদানগুলিকে সহজে for-each লুপের মাধ্যমে ইটারেট করতে পারেন।
IterableMap ইন্টারফেস Map এর সমস্ত কার্যকারিতা সরবরাহ করে, তবে এর মধ্যে একটি অতিরিক্ত সুবিধা হল এটি key-value pairs উপর ইটারেশন করতে সক্ষম।
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.collections4.map.HashedMap;
import org.apache.commons.collections4.map.ListOrderedMap;
import org.apache.commons.collections4.IterableMap;
import java.util.Map;
public class IterableMapExample {
public static void main(String[] args) {
IterableMap<String, String> iterableMap = new ListOrderedMap<>();
iterableMap.put("apple", "fruit");
iterableMap.put("carrot", "vegetable");
iterableMap.put("banana", "fruit");
// Iterating through the map using for-each loop
for (Map.Entry<String, String> entry : iterableMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
এখানে:
আউটপুট:
apple : fruit
carrot : vegetable
banana : fruit
এটি Map এর উপাদানগুলির উপর সহজে ইটারেট করার জন্য একটি সহজ পদ্ধতি সরবরাহ করে, এবং IterableMap এর মাধ্যমে আপনি Map এ key-value pairs উপর for-each লুপ প্রয়োগ করতে পারেন।
MapUtils হল একটি ইউটিলিটি ক্লাস যা Map সম্পর্কিত বিভিন্ন সাধারণ কার্যাবলী সরবরাহ করে। এটি মূলত Map ডেটা স্ট্রাকচারের উপর কিছু সাধারণ কাজ সহজভাবে করার জন্য তৈরি হয়েছে। MapUtils মেথডগুলো null-safe এবং কার্যকরভাবে Map পরিচালনা করতে সাহায্য করে।
import org.apache.commons.collections4.MapUtils;
import java.util.HashMap;
import java.util.Map;
public class MapUtilsExample {
public static void main(String[] args) {
// Creating a Map using HashMap
Map<String, String> map = new HashMap<>();
map.put("apple", "fruit");
map.put("carrot", "vegetable");
// Using MapUtils to safely get a value with a default
String value = MapUtils.getString(map, "banana", "unknown");
System.out.println(value); // Output: unknown
// Using MapUtils to get a value with key existence check
boolean containsKey = MapUtils.isEmpty(map); // Checks if the map is empty
System.out.println(containsKey); // Output: false
// Using MapUtils to safely put a value
MapUtils.putIfAbsent(map, "banana", "fruit");
System.out.println(map); // Output: {apple=fruit, carrot=vegetable, banana=fruit}
}
}
এখানে:
আউটপুট:
unknown
false
{apple=fruit, carrot=vegetable, banana=fruit}
এটি দেখায় কিভাবে MapUtils ব্যবহার করে নিরাপদভাবে Map অপারেশন করা যায়, যা মান বের করার সময় null চেক করতে সাহায্য করে এবং সহজভাবে নতুন মান যোগ করতে সাহায্য করে।
putAll(): একাধিক মান একত্রে একটি Map এ যোগ করা।
Map<String, String> newMap = new HashMap<>();
MapUtils.putAll(newMap, new Object[][] {
{ "one", "1" },
{ "two", "2" }
});
getMap(): একটি Map এর থেকে মান বের করা।
Map<String, String> map = MapUtils.getMap(new HashMap<>(), "key", "defaultValue");
isEmpty(): চেক করে যে Map ফাঁকা কিনা।
boolean isEmpty = MapUtils.isEmpty(map);
isEqualMap(): দুটি Map এর সমান কিনা তা চেক করা।
boolean areEqual = MapUtils.isEqualMap(map1, map2);
getString(): একটি Map থেকে স্ট্রিং টাইপের মান পেতে, যদি মান না থাকে তবে একটি ডিফল্ট মান ফেরত দেয়।
String value = MapUtils.getString(map, "key", "default");
Apache Commons Collections লাইব্রেরির IterableMap এবং MapUtils ক্লাস Java Collections Framework এর সাথে অতিরিক্ত ফিচার এবং ইউটিলিটি সরবরাহ করে। IterableMap আপনাকে একটি Map এর উপাদানগুলোর উপর সহজে ইটারেট করার সুযোগ দেয় এবং MapUtils একটি ব্যবহারিক ক্লাস যা Map এর উপর কাজ করার জন্য বিভিন্ন সাধারণ এবং নিরাপদ ফিচার সরবরাহ করে। এটি null-safe অপারেশন, মান বের করা, মান যুক্ত করা এবং Map এর তুলনা করার সুবিধা প্রদান করে। Apache Commons Collections এর এই ফিচারগুলি ব্যবহার করে Map এর কার্যাবলী আরও সহজ, কার্যকরী এবং নিরাপদ করা যায়।
Apache Commons Collections লাইব্রেরিটি Java Collections Framework এর উপর ভিত্তি করে একাধিক অতিরিক্ত ডাটা স্ট্রাকচার এবং ইউটিলিটি প্রদান করে, যা সাধারণ কালেকশনগুলির উপর কার্যক্রম সহজতর করে। এর মধ্যে একটি শক্তিশালী ক্লাস হল IteratorUtils, যা Iterator এর সাথে কাজ করার জন্য একটি সেট অব ফাংশন প্রদান করে।
IteratorUtils ক্লাস ব্যবহার করে আপনি Java এর Iterator থেকে সহজে মান বের করতে, সংগ্রহ করতে, এবং অন্যান্য কার্যক্রম সম্পাদন করতে পারেন। এই ক্লাসটি Iterator এর সাথে সম্পর্কিত কার্যক্রমকে অনেক বেশি নমনীয় এবং কার্যকরী করে তোলে।
IteratorUtils ক্লাসটি Apache Commons Collections এর একটি ইউটিলিটি ক্লাস, যা Iterator ব্যবহারের জন্য অনেক সহায়ক মেথড সরবরাহ করে। এই ক্লাসটির সাহায্যে আপনি একটি Iterator এর উপাদানকে বিভিন্ন পদ্ধতিতে প্রসেস করতে পারবেন, যেমন ইটেরেট করা, ফিল্টার করা, এবং ট্রান্সফর্ম করা।
while (iterator.hasNext())
ব্যবহারের চেয়ে সহজ এবং সরল হয়।toList():
Iterator<String> iterator = Arrays.asList("apple", "banana", "cherry").iterator();
List<String> list = IteratorUtils.toList(iterator);
System.out.println(list); // Output: [apple, banana, cherry]
toArray():
Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4).iterator();
Integer[] array = IteratorUtils.toArray(iterator, Integer.class);
System.out.println(Arrays.toString(array)); // Output: [1, 2, 3, 4]
filter():
Iterator<String> iterator = Arrays.asList("apple", "banana", "cherry").iterator();
Iterator<String> filteredIterator = IteratorUtils.filteredIterator(iterator, new Predicate<String>() {
@Override
public boolean evaluate(String item) {
return item.startsWith("a"); // Only items starting with "a"
}
});
while (filteredIterator.hasNext()) {
System.out.println(filteredIterator.next());
}
// Output: apple
transform():
Iterator<String> iterator = Arrays.asList("apple", "banana", "cherry").iterator();
Iterator<String> transformedIterator = IteratorUtils.transformedIterator(iterator, new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase(); // Convert each element to uppercase
}
});
while (transformedIterator.hasNext()) {
System.out.println(transformedIterator.next());
}
// Output: APPLE, BANANA, CHERRY
emptyIterator():
Iterator<String> emptyIterator = IteratorUtils.emptyIterator();
System.out.println(emptyIterator.hasNext()); // Output: false
IteratorUtils শুধুমাত্র Iterator ব্যবহারের জন্যই নয়, Collection Iteration এর জন্যও খুব কার্যকরী। এটি Collection এর উপাদানগুলির উপর সহজেই কার্যক্রম সম্পাদন করার জন্য Iterator তৈরি করতে সহায়তা করে, এবং এতে কোনো পদ্ধতি ব্যবহার করা ছাড়াও foreach বা for-each loop ব্যবহার করতে পারেন।
List<String> fruits = Arrays.asList("apple", "banana", "cherry");
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
// Output: apple, banana, cherry
এখানে, iterator.next()
পদ্ধতির মাধ্যমে আমরা Collection এর সব উপাদান ভ্রমণ (traverse) করেছি।
IteratorUtils দিয়ে আপনি Collection এর উপাদানগুলিকে ফিল্টার করতে বা ট্রান্সফর্ম করতে পারেন, যাতে আপনি আপনার প্রয়োজনীয় ডাটা বের করতে পারেন।
List<String> fruits = Arrays.asList("apple", "banana", "cherry", "avocado");
Iterator<String> iterator = IteratorUtils.filteredIterator(fruits.iterator(), new Predicate<String>() {
public boolean evaluate(String fruit) {
return fruit.startsWith("a");
}
});
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// Output: apple, avocado
এখানে:
IteratorUtils.filteredIterator
ব্যবহার করে Collection এর উপাদানগুলির মধ্যে শুধু "a" দিয়ে শুরু হওয়া ফলগুলি ফিল্টার করা হয়েছে।List<String> fruits = Arrays.asList("apple", "banana", "cherry");
Iterator<String> transformedIterator = IteratorUtils.transformedIterator(fruits.iterator(), new Transformer<String, String>() {
public String transform(String fruit) {
return fruit.toUpperCase(); // Convert to uppercase
}
});
while (transformedIterator.hasNext()) {
System.out.println(transformedIterator.next());
}
// Output: APPLE, BANANA, CHERRY
এখানে:
IteratorUtils.transformedIterator
ব্যবহার করে Collection এর উপাদানগুলিকে ট্রান্সফর্ম করে সমস্ত ফলের নাম বড় অক্ষরে রূপান্তরিত করা হয়েছে।Apache Commons Collections এর IteratorUtils ক্লাস ব্যবহার করে আপনি সহজে Iterator এর মাধ্যমে Collection এর উপাদানগুলির উপর কার্যক্রম সম্পাদন করতে পারেন। এটি Iterator এর উপাদানগুলি ফিল্টার করা, ট্রান্সফর্ম করা, এবং আইটেম সংগ্রহ করার মতো কার্যক্রম সহজ করে তোলে। এর মাধ্যমে Collection Iteration আরও সহজ এবং কার্যকরী হয়ে ওঠে। IteratorUtils কালেকশনগুলির উপাদানগুলির উপর আরো জটিল ফিল্টারিং, ট্রান্সফরমেশন এবং সংগ্রহ কার্যক্রম বাস্তবায়ন করতে সাহায্য করে, যা Java Collections Framework এর মৌলিক কার্যক্রমের তুলনায় আরও কার্যকর।
Apache Commons Collections Java ডেভেলপারদের জন্য একটি শক্তিশালী লাইব্রেরি, যা Java Collections Framework (JCF)-এর বাইরে কিছু অতিরিক্ত ফিচার এবং ডেটা স্ট্রাকচার সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ এবং কার্যকরী ডেটা স্ট্রাকচার হল Bag, যা সাধারণভাবে MultiSet হিসেবেও পরিচিত।
Bag হল একটি ডেটা স্ট্রাকচার যা একাধিক মান (values) রাখতে পারে এবং একটি উপাদানকে একাধিকবার ধারণ করতে পারে। এটি একটি সাধারণ Set নয়, কারণ Set কেবল ইউনিক উপাদান ধারণ করে, কিন্তু Bag একই উপাদান একাধিকবার রাখতে সক্ষম।
Bag এর সবচেয়ে বড় বৈশিষ্ট্য হল এটি একটি উপাদান কতবার অন্তর্ভুক্ত হয়েছে তা ট্র্যাক করতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি শপিং কার্টে একাধিক আইটেম যোগ করেন, তবে সেই আইটেমটির পুনরাবৃত্তি থাকবে এবং Bag এটিকে সঠিকভাবে ট্র্যাক করতে পারবে।
Bag ব্যবহার করা খুবই সহজ, এবং এটি সাধারণত HashBag
, TreeBag
বা LinkedHashBag
এর মতো বিভিন্ন বাস্তবায়নের মাধ্যমে আসে। নিচে একটি সাধারণ উদাহরণ দেওয়া হলো:
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
public class BagExample {
public static void main(String[] args) {
// Create a Bag instance
Bag<String> bag = new HashBag<>();
// Add elements
bag.add("apple");
bag.add("banana");
bag.add("apple");
bag.add("orange");
// Print the Bag
System.out.println("Bag: " + bag);
// Get the count of an element
System.out.println("Count of apple: " + bag.getCount("apple"));
// Remove an element
bag.remove("apple");
System.out.println("Bag after removing apple: " + bag);
}
}
Bag: [apple, apple, banana, orange]
Count of apple: 2
Bag after removing apple: [banana, orange, apple]
HashBag
একটি সাধারণ Bag বাস্তবায়ন যা কোনো নির্দিষ্ট অর্ডার ছাড়াই উপাদানগুলিকে ধারণ করে।add()
মেথডটি উপাদানগুলিকে Bag-এ যোগ করে।getCount()
মেথডটি একটি উপাদান কতবার Bag-এ রয়েছে তা ফেরত দেয়।remove()
মেথডটি নির্দিষ্ট উপাদানটি Bag থেকে মুছে ফেলে।BagUtils একটি ইউটিলিটি ক্লাস যা Bag টাইপের কালেকশনের জন্য বিভিন্ন সহায়ক মেথড সরবরাহ করে। এটি Bag এর উপর সাধারণ অপারেশন (যেমন, যোগ করা, বাদ দেওয়া, গণনা করা ইত্যাদি) করতে সহায়তা করে। BagUtils এর সাহায্যে আপনি আরও সহজে এবং কার্যকরভাবে Bag এর সাথে কাজ করতে পারেন।
BagUtils.synchronizedBag()
:
Bag<String> synchronizedBag = BagUtils.synchronizedBag(new HashBag<>());
BagUtils.addAll()
:
Collection<String> collection = Arrays.asList("apple", "banana", "apple");
Bag<String> bag = new HashBag<>();
BagUtils.addAll(bag, collection);
BagUtils.isBag()
:
boolean isBag = BagUtils.isBag(bag);
BagUtils.getUniqueSet()
:
Set<String> uniqueSet = BagUtils.getUniqueSet(bag);
BagUtils.subtract()
:
Bag<String> bag1 = new HashBag<>(Arrays.asList("apple", "banana", "apple"));
Bag<String> bag2 = new HashBag<>(Arrays.asList("banana"));
Bag<String> result = BagUtils.subtract(bag1, bag2);
Bag এবং BagUtils Apache Commons Collections এর অত্যন্ত কার্যকরী বৈশিষ্ট্যগুলির মধ্যে একটি। Bag ডুপ্লিকেট উপাদান ধারণ এবং তাদের উপস্থিতির সংখ্যা ট্র্যাক করতে সহায়তা করে, এবং BagUtils সহজেই Bag-এর সাথে কাজ করার জন্য ইউটিলিটি মেথড সরবরাহ করে। এটি বিশেষভাবে উপকারী যখন আপনাকে ডেটার বিভিন্ন সংস্করণের ট্র্যাকিং বা একাধিক মান একত্রে সংরক্ষণ করতে হয়। Java ডেভেলপারদের জন্য এটি একটি শক্তিশালী টুল, যা তাদের কাজের গতি এবং কার্যকারিতা বৃদ্ধি করতে সহায়তা করে।
common.read_more